package com.easyboot.framework.monitor;

import cn.hutool.core.date.BetweenFormatter;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.easyboot.utils.Arith;
import org.thymeleaf.util.DateUtils;

import java.lang.management.ManagementFactory;

/**
 * @author yushuo
 * @className
 * @descripton TODO
 * @date 2021/6/28 13:21
 **/
public class JvmDto {
    /**
     * 当前JVM占用的内存总数(M)
     */
    private double total;

    /**
     * JVM最大可用内存总数(M)
     */
    private double max;

    /**
     * JVM空闲内存(M)
     */
    private double free;

    /**
     * JDK版本
     */
    private String version;

    /**
     * JDK路径
     */
    private String home;

    public double getTotal()
    {
        return Arith.div(total, (1024 * 1024), 2);
    }

    public void setTotal(double total)
    {
        this.total = total;
    }

    public double getMax()
    {
        return Arith.div(max, (1024 * 1024), 2);
    }

    public void setMax(double max)
    {
        this.max = max;
    }

    public double getFree()
    {
        return Arith.div(free, (1024 * 1024), 2);
    }

    public void setFree(double free)
    {
        this.free = free;
    }

    public double getUsed()
    {
        return Arith.div(total - free, (1024 * 1024), 2);
    }

    public double getUsage()
    {
        return Arith.mul(Arith.div(total - free, total, 4), 100);
    }

    /**
     * 获取JDK名称
     */
    public String getName()
    {
        return ManagementFactory.getRuntimeMXBean().getVmName();
    }

    public String getVersion()
    {
        return version;
    }

    public void setVersion(String version)
    {
        this.version = version;
    }

    public String getHome()
    {
        return home;
    }

    public void setHome(String home)
    {
        this.home = home;
    }

    /**
     * JDK启动时间
     */
    public String getStartTime()
    {
        //DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate());
        long time = ManagementFactory.getRuntimeMXBean().getStartTime();

        return DateUtil.format(DateUtil.date(time),"yyyy-MM-dd HH:mm:ss");
    }

    /**
     * JDK运行时间
     */

    public String getRunTime()
    {

        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
        long between = DateUtil.between(DateUtil.date(time), DateUtil.date(), DateUnit.SECOND);
        return DateUtil.formatBetween(between, BetweenFormatter.Level.SECOND);
    }
}
